// 定义 init_input_prompts 函数quantitySelect
let mdata = {};

//


//添加 起手式提示词 或者是 自动生成的  阴历提示词
const add_input_prompt = (prompts) => {

    isPrompt = document.getElementById('mySwitch').checked
    console.log("prompts :", prompts.length);


    for (const index in prompts) {
        if (isPrompt) {
            mPrompt = prompts[index]
            console.log("index :", index);
            findTextareaByNum(index, mPrompt);
            console.log("mPrompt :", mPrompt);
        } else {
            console.log("关闭按钮... :", index);
            const start_prompt_input = document.getElementById('start_prompt_input');
            findTextareaByNum(index, start_prompt_input.value);

        }

    }

}


// 示例调用


const init_input_prompts = async (isClean = true) => {  // 添加async声明

    const selectElement = document.getElementById('quantitySelect');
    if (isClean) {
        // 检查是否存在文本框容器.
        const container = document.getElementById('textarea-container');
        // 清空之前添加的文本框.
        container.innerHTML = '';
    }

    // 显示提示词
    console.log("selectElement.value ", selectElement.value);
    postData('/getlunars', {num: selectElement.value}, add_input_prompt);

};

const add_video_script = (re) => {


    index = re["index"]
    prompt = re["video_scripts"]

    findTextareaByNum(index, prompt)
    console.log("add_video_script 返回 视频脚本:", prompt);


}

// 添加async关键字让函数变为异步函数
const createSceneScript = async () => {
    // 获取所有匹配的 textarea 元素
    const textareas = document.querySelectorAll('textarea.textarea_prompt');
    // 示例：遍历并输出内容

    setInputValueById('create_button', "正在生成中...");
    for (let i = 0; i < textareas.length; i++) {
        const textarea = textareas[i];
        console.log("textarea.value", textarea.value, "textarea.index", textarea.getAttribute('num'));
        // 使用await关键字等待postData返回结果
        const result = await postData('/videscript', {"index": textarea.getAttribute('num'), "prompt": textarea.value});


        add_video_script(result);
    }
    setInputValueById('create_button', "生成视频脚本", false);
};


// 定义 runProcess 函数
const runProcess = async () => {
    console.log(" runProcess 执行.");
    if (document.getElementById('create_button').disabled == true) {
        console.log(" 脚本生成中 请稍后..");
        return;
    } else {
        console.log("生成mp3中...  ");
        const data = getFormData('configForm');

        // 显示加载中对话框
        showLoadingDialog('正在生成MP3文件，请稍候...');

        try {
            const datas = await postData('/run', data);
            console.log("mre :", datas);
            // 关闭加载对话框
            hideLoadingDialog();
            // 调用获取声音列表的函数，而不是直接显示模态框
            fetchAndShowSoundsList();
        } catch (error) {
            // 发生错误时也关闭加载对话框
            hideLoadingDialog();
            showAlert('生成MP3文件失败: ' + error.message);
        }
        return;
    }
};

// 显示加载对话框
function showLoadingDialog(message) {
    // 创建对话框元素（如果不存在）
    let loadingDialog = document.getElementById('loadingDialog');
    if (!loadingDialog) {
        loadingDialog = document.createElement('div');
        loadingDialog.id = 'loadingDialog';
        loadingDialog.className = 'modal';
        loadingDialog.style.display = 'none';
        loadingDialog.style.position = 'fixed';
        loadingDialog.style.zIndex = '1000';
        loadingDialog.style.left = '0';
        loadingDialog.style.top = '0';
        loadingDialog.style.width = '100%';
        loadingDialog.style.height = '100%';
        loadingDialog.style.overflow = 'auto';
        loadingDialog.style.backgroundColor = 'rgba(0,0,0,0.4)';

        const modalContent = document.createElement('div');
        modalContent.className = 'modal-dialog modal-dialog-centered';

        const modalBody = document.createElement('div');
        modalBody.className = 'modal-content';

        const loadingContent = document.createElement('div');
        loadingContent.className = 'modal-body text-center p-4';

        const spinner = document.createElement('div');
        spinner.className = 'spinner-border text-primary mb-3';
        spinner.setAttribute('role', 'status');

        const spinnerText = document.createElement('span');
        spinnerText.className = 'visually-hidden';
        spinnerText.textContent = '加载中...';

        const messageElement = document.createElement('p');
        messageElement.id = 'loadingMessage';
        messageElement.className = 'mb-0';

        spinner.appendChild(spinnerText);
        loadingContent.appendChild(spinner);
        loadingContent.appendChild(messageElement);
        modalBody.appendChild(loadingContent);
        modalContent.appendChild(modalBody);
        loadingDialog.appendChild(modalContent);

        document.body.appendChild(loadingDialog);
    }

    // 更新消息并显示对话框
    document.getElementById('loadingMessage').textContent = message;
    loadingDialog.style.display = 'block';
}

// 隐藏加载对话框
function hideLoadingDialog() {
    const loadingDialog = document.getElementById('loadingDialog');
    if (loadingDialog) {
        loadingDialog.style.display = 'none';
    }
}

// 获取声音列表并显示模态框
async function fetchAndShowSoundsList() {
    try {
        // 使用POST请求获取声音列表
        const response = await fetch('/get_sounds', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({})
        });

        if (!response.ok) {
            throw new Error('获取声音列表失败');
        }

        const soundsList = await response.json();
        showMListModal(soundsList);
    } catch (error) {
        console.error('获取声音列表错误:', error);
        showAlert('获取声音列表失败: ' + error.message);
    }
}

// 实现 audio_list 函数，这里假设使用之前的 fetch 请求获取声音列表
 function getAudioList() {
   fetchAndShowSoundsList()
}

// 显示文件列表模态框
function showMListModal(soundsList) {
    const modal = document.getElementById('mListModal');
    const listContainer = document.getElementById('mList');

    // 清空列表容器
    listContainer.innerHTML = '';

    // 遍历声音列表生成文件列表项
    soundsList.forEach((item, index) => {
        const filename = item.filename;
        const listItem = document.createElement('li');
        listItem.className = 'list-group-item d-flex align-items-center';

        const checkboxDiv = document.createElement('div');
        checkboxDiv.className = 'form-check me-3';

        const checkbox = document.createElement('input');
        checkbox.className = 'form-check-input';
        checkbox.type = 'checkbox';
        checkbox.id = `file-${index}`;
        checkbox.value = filename;
        checkbox.name = 'file_checkbox';

        const label = document.createElement('label');
        label.className = 'form-check-label ms-2 flex-grow-1';
        label.htmlFor = `file-${index}`;
        label.textContent = filename;

        // 添加音频信息
        const infoSpan = document.createElement('span');
        infoSpan.className = 'badge bg-light text-dark ms-2';
        infoSpan.textContent = item.azure_voice_name;

        // 添加播放按钮
        const playButton = document.createElement('button');
        playButton.className = 'btn btn-sm btn-outline-primary ms-auto me-2';
        playButton.innerHTML = '<i class="fas fa-play"></i> 播放';
        playButton.onclick = () => {
            const audio = new Audio(`/static/audio/${filename}`);
            // 如果有正在播放的音频，暂停它
            if (currentAudio) {
                currentAudio.pause();
                currentAudio.currentTime = 0; // 重置音频播放位置
            }
            // 更新当前正在播放的音频对象
            currentAudio = audio;
            audio.play();
        };

        checkboxDiv.appendChild(checkbox);
        listItem.appendChild(checkboxDiv);
        listItem.appendChild(label);
        listItem.appendChild(infoSpan);
        listItem.appendChild(playButton);
        listContainer.appendChild(listItem);
    });

    // 显示模态框
    modal.style.display = 'block';

    // 全选功能
    const selectAllCheckbox = document.getElementById('selectAll');
    selectAllCheckbox.checked = false;
    selectAllCheckbox.onchange = function () {
        const checkboxes = document.querySelectorAll('#mList input[name="file_checkbox"]');
        checkboxes.forEach(checkbox => {
            checkbox.checked = selectAllCheckbox.checked;
        });
    };

    // 为删除按钮添加点击事件处理函数
    const deleteButton = document.getElementById('deleteFiles');
    deleteButton.onclick = deleteSelectedFiles;

    // 为下载按钮添加点击事件处理函数
    const downloadButton = document.getElementById('downloadFiles');
    downloadButton.onclick = downloadSelectedFiles;

    // 为关闭按钮添加点击事件处理函数
    const closeButton = document.getElementById('closeMListModal');
    closeButton.onclick = () => {
        modal.style.display = 'none';
    };

    // 点击模态框外部区域关闭模态框
    window.onclick = function (event) {
        if (event.target === modal) {
            modal.style.display = 'none';
        }
    };
}

// 删除选中的文件
function deleteSelectedFiles() {
    const checkboxes = document.querySelectorAll('#mList input[name="file_checkbox"]:checked');
    const selectedFiles = Array.from(checkboxes).map(checkbox => checkbox.value);

    if (selectedFiles.length > 0) {
        const formData = new FormData();
        selectedFiles.forEach(file => {
            formData.append('file_names', file);
        });

        fetch('/delete_mp3', {
            method: 'POST',
            body: formData
        })
            .then(response => response.json())
            .then(data => {
                if (data.status === 'success') {
                    console.log('文件删除成功');
                    // 重新获取并显示更新后的列表
                    fetchAndShowSoundsList();
                } else {
                    showAlert('删除文件失败');
                }
            })
            .catch(error => {
                console.error('删除文件错误:', error);
                showAlert('删除文件出错: ' + error.message);
            });
    } else {
        showAlert('请先选择要删除的文件');
    }
}

// 下载选中的文件
function downloadSelectedFiles() {
    const checkboxes = document.querySelectorAll('#mList input[name="file_checkbox"]:checked');
    const selectedFiles = Array.from(checkboxes).map(checkbox => checkbox.value);

    if (selectedFiles.length > 0) {
        const form = document.createElement('form');
        form.method = 'post';
        form.action = '/download_mp3';

        selectedFiles.forEach(file => {
            const input = document.createElement('input');
            input.type = 'hidden';
            input.name = 'file_names';
            input.value = file;
            form.appendChild(input);
        });

        document.body.appendChild(form);
        form.submit();
        document.body.removeChild(form);
    } else {
        showAlert('请先选择要下载的文件');
    }
}

//  找到 Textarea   参数  索引  和  提示词
function findTextareaByNum(num, mstr) {
    try {
        mtextarea = document.querySelector(`textarea[num="${num}"]`);
        if (mtextarea == null) {
            // console.log("找到 mtextarea  ", mstr);
            add_textarea(num, mstr)

        } else {
            mtextarea.value = mstr;
            console.log(" findTextareaByNum mstr 未找到 :", mstr);
        }

    } catch {
        console.log("findTextareaByNum  error:", e);
        return false;

    }


    return true
}


// 获取根据当前时间 的 prompts 列表
function add_textarea(index, prompt) {
    const container = document.getElementById('textarea-container');

    const div = document.createElement('fieldset');
    div.className = 'mb-3 border p-3 api-text';
    // 创建标签元素
    const label = document.createElement('label');
    label.className = 'form-label';
    label.style.cssText = 'display: block; text-align: left; padding-left: 10px;';
    label.textContent = "第 " + (Number(index) + 1) + "条";
    // 创建文本框元素
    const textarea = document.createElement('textarea');

    textarea.setAttribute('num', index);
    textarea.className = 'form-control daily_tip textarea_prompt';
    textarea.name = `prompt_` + index;
    textarea.rows = 3;
    textarea.placeholder = `请输入提示词`
    textarea.value = prompt["cnlunar"]

    // 将标签和文本框添加到 div 中
    div.appendChild(label);
    div.appendChild(textarea);
    // 将 div 添加到容器中
    container.appendChild(div);

}


// 定义 runProcess 函数
const init = () => {

    init_input_prompts()
    // 添加事件监听器，当用户点击按钮时触发 runProcess 函数
    document.getElementById('mySwitch').addEventListener('click', function () {


        console.log("关闭按钮... :");
        init_input_prompts(this.checked);
    });
};


document.addEventListener('DOMContentLoaded', function () {
    // DOM 加载完成后，这里可以安全地操作 DOM 元素
    console.log('DOM 已加载完成！'); // 在控制台打印信息
    init()

});